<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vue的事件绑定</title>
    <!-- 安装vue：当你使用script进行vue安装之后，上下文就注册了一个全局变量 Vue -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>

<body>

    <!-- 
        Vue事件处理：
            1. 在Vue中完成事件绑定需要哪个指令？
                v-on指令
                语法格式：
                    v-on:事件名="表达式"
                例如：
                    v-on:click="表达式" 表示当发生鼠标单击事件之后，执行表达式
            2. 在Vue当中，所有事件所关联的回调函数，需要在Vue实例的配置项methods中进行定义。
                methods是一个对象：{}
                在这个methods对象中可以定义多个回调函数
            3. v-on 指令也有简写形式
                v-on:click 简写为 @click
                v-on:keydown 简写为 @keydown
                ...
            4. Vue在调用回调函数的时候，会自动给回调函数传递一个对象，这个对象是：当前发生的事件对象
            5. 再绑定回调函数时，可以在回调函数的参数上使用 $event 占位符，Vue框架看到这个 $event 占位符之后，会自动将当前事件以对象的形式传过去
    -->

    <!-- 准备一个容器 -->
    <div id="app">
        <h1>{{msg}}</h1>

        <!-- js原生代码绑定事件 -->
        <button onclick="alert('hello')">hello</button>

        <!-- 使用Vue来完成事件绑定 -->
        <!-- 以下是错误的 因为alert()并没有被Vue实例管理。此处表达式需要遵循：常量、js表达式、Vue实例所管理的xxx -->
        <button v-on:click="alert('hello')">hello1</button>

        <!-- 以下也是错误的，因为sayHello()并没有被Vue实例所管理 -->
        <button v-on:click="sayHello()">hello1</button>

        <button v-on:click="sayHi()">Hi</button>

        <!-- 简写方式： v-on:  简写为 @ -->
        <button @click="sayHi()">Hi1</button>

        <!-- 绑定的回调函数，如果不需要传任何参数，小括号() 可以省略  -->
        <button @click="sayHi">Hi2</button>

        <!-- 无参数时，会默认一个事件对象的参数 -->
        <button @click="sayWhat">sayWhat</button>

        <!-- 有参数的情况，也想使用 事件对象 ，可以用 $event 来表示，顺序可以颠倒 -->
        <button @click="sayWhat1('jack',$event)">sayWhat1</button>
    </div>

    <!-- vue程序 -->
    <script>

        // 自定义一个函数
        // function sayHello() {
        //     alert('hello')
        // }

        const vm = new Vue({
            el: '#app',
            data: {
                msg: 'Hello Vue!'
            },
            methods: {
                // 回调函数
                sayHi() {
                    alert('hi');
                },
                sayWhat(event) {
                    console.log(event) //默认一个事件对象
                    console.log(event.target) // 按钮Html
                    console.log(event.target.innerText) //按钮的文本
                },
                sayWhat1(val, event) {
                    console.log(event) //默认一个事件对象
                    console.log(event.target) // 按钮Html
                    console.log(event.target.innerText) //按钮的文本
                }

            }
        })

    </script>
</body>

</html>